
#include "semlock.h"

#include <stdio.h>

int semaphore_init(int sem_id)
{
	union semun sem_union;

	sem_union.val = 1;

	return semctl(sem_id, 0, SETVAL, sem_union);
}

int semaphore_release(int sem_id)
{
	int ret = 0;

	union semun sem_union;

	ret = semctl(sem_id, 0, IPC_RMID, sem_union);

	return ret;
}

int semaphore_down(int sem_id)
{
	struct sembuf sem_b;

	sem_b.sem_num = 0;
	sem_b.sem_op = -1;
	sem_b.sem_flg = SEM_UNDO;

	return semop(sem_id, &sem_b, 1);
}

int semaphore_up(int sem_id)
{
	struct sembuf sem_b;

	sem_b.sem_num = 0;
	sem_b.sem_op = 1;
	sem_b.sem_flg = SEM_UNDO;

	return semop(sem_id, &sem_b, 1);
}